package com.teradata.lambda.innerclass;

import org.junit.Test;

/**
 *
 * 既然lambda表达式即将正式取代Java代码中的匿名内部类，那么有必要对二者做一个比较分析。一个关键的不同点就是关键字 this。
 * 匿名类的 this 关键字指向匿名类，而lambda表达式的 this 关键字指向包围lambda表达式的类。
 * 另一个不同点是二者的编译方式。
 * Java编译器将lambda表达式编译成类的私有方法。
 * 使用了Java 7的 invokedynamic 字节码指令来动态绑定这个方法。
 *
 *
 * 毫无疑问，lambda表达式用得最多的场合就是替代匿名内部类，而实现Runnable接口是匿名内部类的经典例子。
 * lambda表达式的功能相当强大，用()->就可以代替整个匿名内部类！请看代码：
 * 如果使用匿名内部类：
 */
public class InnerClass {


    @Test
    public void oldRunable() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("The old runable now is using!");
            }
        }).start();
    }

    @Test
    public void runable() {
        new Thread(() -> System.out.println("It's a lambda function!")).start();
    }

}
